// src/stores/notes.ts
import { defineStore } from 'pinia';

export interface NoteItem {
  id: string;
  content: string;
  images: string[];
  tag?: string;
  createdAt: string; // ISO string
  showExpand?: boolean;
  collapsed?: boolean;
  expanded?: boolean;
  data: string;
}

type PartialNote = Omit<NoteItem, 'id' | 'createdAt'>;

const LS_KEY = 'notes';
const LS_FLAG_STATIC = 'notes_static_seeded';

// —— 固定“写死”的初始数据（只注一次） ——
const STATIC_NOTES_SEED: PartialNote[] = [
  {
    content:
      '我的存在究竟是什么？也许并不是要成就多么宏伟的目标，而是能在有限的日子里，认真地体验情感的起伏，与身边的人彼此记住。哪怕只是有人在意我爱喝拿铁，或是有人因我一句话改变了选择，这些微小的痕迹，便是我存在过的证明。',
    images: ['/jyj/jyj_4.png'],
    tag: '自我探寻',
    showExpand: true,
    collapsed: true,
    expanded: false,
    data: '2025-08-31 20:18:46'
  },
  {
    content:
      '上周和朋友去了九寨沟。我们先去了五花海，湖水清澈得像打翻的颜料盘；又走到诺日朗瀑布，水声轰鸣，雾气扑面，像置身仙境。途中遇到一对来自广州的夫妻，他们热情地帮我们拍了合照，还分享了附近藏寨的美食推荐。唯一的遗憾是旺季人太多，很多景点需要排长队，拍照时总会被路人闯入。还有，景区里餐饮贵且口味一般，下次一定自备干粮和热水。',
    images: ['/jyj/jyj_3.png'],
    tag: '旅游',
    showExpand: true,
    collapsed: true,
    expanded: false,
    data: '2025-08-28 09:28:46'
  },
  {
    content:
      '导师又上压力了，别人都在实习，我还一次都没出去过，这个鬼论文真是一点也写不下去了！',
    images: ['/jyj/jyj_1.png'],
    tag: '实习',
    showExpand: true,
    collapsed: false,
    expanded: false,
    data: '2025-08-26 21:18:46'
  },
  {
    content:
      '也许是因为我本身学心理学的缘故，总忍不住带着分析和理解的目光去观察我们的关系。可奇妙的是，当我越深入地探索他的内心，我又越被一种温柔的不可言说所包围，那种感觉超越了理论，更像是活生生的体验。\n\nINFJ的气质让我觉得既亲近又神秘。他总是带着一种内敛的力量，话语不多，却能在关键时刻让我感到被理解。比如我在讲述研究的困惑时，他不会急于给出建议，而是静心地听着，仿佛用一种超然的方式回应，那种深深的专注是我所渴求的。\n\n我也注意到和他相处并不是完全轻松的。他有时会陷入沉思，不愿表达内心的复杂感受。我能感受到他在用力维持一种平衡：既想要与我贴近，又需要保有自己独立的精神空间。我理解这种矛盾，也尊重他的时间，但作为恋人，我难免会有一丝焦虑——我害怕分享，希望知道他的海中的秘密。于是，我开始思考：如何在保持耐心的同时不让自己的期待变成一种无形的压力？或许是我应该到最需要修炼的课题：在理解与需求之间找到一个平衡点。',
    images: [],
    tag: '恋爱',
    showExpand: true,
    collapsed: true,
    expanded: false,
    data: '2025-08-26 21:18:46'
  },
];

export const useNotesStore = defineStore('notes', {
  state: () => ({
    notes: [] as NoteItem[],
    isHydrated: false,
  }),
  getters: {
    allNotes: (s) => s.notes,
  },
  actions: {
    // 从 localStorage 恢复
    hydrateFromLocal() {
      if (this.isHydrated) return;
      try {
        const raw = localStorage.getItem(LS_KEY);
        if (raw) {
          this.notes = JSON.parse(raw);
        } else {
          this.notes = [];
        }
      } catch {
        this.notes = [];
      } finally {
        this.isHydrated = true;
      }
    },

    // 首次进入时注入“写死”的两条数据（只注一次，不会重复）
    loadStaticDefaultsOnce() {
      const seeded = localStorage.getItem(LS_FLAG_STATIC);
      if (seeded) return;
      const toAdd = STATIC_NOTES_SEED.map((n) => this._wrapNote(n));
      this.notes = [...toAdd, ...this.notes]; // 追加到顶部
      this.persist();
      localStorage.setItem(LS_FLAG_STATIC, '1');
    },

    // 批量添加，方便分页
    addMany(list: PartialNote[], toTop = true) {
      const wrapped = list.map((n) => this._wrapNote(n));
      this.notes = toTop ? [...wrapped, ...this.notes] : [...this.notes, ...wrapped];
      this.persist();
    },

    addNote(partial: PartialNote) {
      const item = this._wrapNote(partial);
      this.notes.unshift(item);
      this.persist();
    },

    removeByIndex(index: number) {
      if (index >= 0 && index < this.notes.length) {
        this.notes.splice(index, 1);
        this.persist();
      }
    },

    toggleExpand(index: number) {
      const n = this.notes[index];
      if (!n) return;
      n.expanded = !n.expanded;
      this.persist();
    },

    persist() {
      localStorage.setItem(LS_KEY, JSON.stringify(this.notes));
    },

    // 内部：补齐 id 与 createdAt
    _wrapNote(n: PartialNote): NoteItem {
      return {
        id: crypto?.randomUUID?.() || String(Date.now() + Math.random()),
        createdAt: new Date().toISOString(),
        showExpand: false,
        collapsed: false,
        expanded: false,
        ...n,
      };
    },
  },
});
